package leecode

type Checkout struct {
	queue    []int
	maxQueue []int
}

func ConstructorR() Checkout {
	return Checkout{
		queue:    make([]int, 0),
		maxQueue: make([]int, 0),
	}
}

func (this *Checkout) Get_max() int {
	if len(this.queue) == 0 {
		//如果队列为空 - 1
		return -1
	}
	return this.maxQueue[0]
}

func (this *Checkout) Add(value int) {
	this.queue = append(this.queue, value)
	//如果当前元素大于最大值队列中的末尾的元素,移除
	for len(this.maxQueue) > 0 && value >= this.maxQueue[len(this.maxQueue)-1] {
		this.maxQueue = this.maxQueue[:len(this.maxQueue)-1]
	}
	this.maxQueue = append(this.maxQueue, value)
}

func (this *Checkout) Remove() int {
	if len(this.queue) == 0 {
		return -1
	}
	// 移除元素
	price := this.queue[0] // 需要移除的商品的价格
	this.queue = this.queue[1:]

	// 从 maxQueue 中移除相同价格的商品
	if price == this.maxQueue[0] {
		this.maxQueue = this.maxQueue[1:]
	}
	return price
}
